// Package auth internal/apps/auth/routes.go
package auth

import (
	"star-go-app/internal/apps/auth/controllers"
	"star-go-app/pkg/middleware"

	"github.com/gin-gonic/gin"
)

// registerRoutes 注册认证模块的路由
func (m *Module) registerRoutes(router *gin.RouterGroup) {
	// 创建控制器实例
	userController := controllers.NewUserController()
	authController := controllers.NewAuthController()
	roleController := controllers.NewRoleController()

	// 认证路由组 - 公开路由，无需token验证
	authGroup := router.Group("")
	{
		authGroup.POST("/login", authController.Login)          // 用户登录
		authGroup.POST("/refresh", authController.RefreshToken) // 刷新token
		authGroup.POST("/verify", authController.VerifyToken)   // 验证token
		authGroup.POST("/logout", authController.Logout)        // 用户登出
	}

	// 用户管理路由组 - 全局认证已处理基础认证
	userGroup := router.Group("/users")
	// userGroup.Use(middleware.RequireAuth()) // 全局认证已处理，无需重复添加
	{
		// 基本CRUD操作
		userGroup.POST("", userController.CreateUser)               // 创建用户
		userGroup.GET("", userController.GetUserList)               // 获取用户列表
		userGroup.GET("/:id", userController.GetUserByID)           // 获取用户详情
		userGroup.PUT("/:id", userController.UpdateUser)            // 部分更新用户
		userGroup.PUT("/:id/whole", userController.UpdateUserWhole) // 完整更新用户
		userGroup.DELETE("/:id", userController.DeleteUser)         // 软删除用户
		userGroup.DELETE("/:id/true", middleware.RequireSuperuser(),
			userController.DeleteUserPermanently) // 永久删除用户

		// 密码管理
		userGroup.PUT("/:id/password", userController.ChangePassword) // 修改密码
	}

	// 角色管理路由组 - 全局认证已处理基础认证 需要角色是管理员
	roleGroup := router.Group("/roles")
	roleGroup.Use(middleware.RequireAdmin())
	// roleGroup.Use(middleware.RequirePermissions("CREATE_ROLE", "READ_ROLE", "UPDATE_ROLE", "DELETE_ROLE"))

	{
		// 基本CRUD操作
		roleGroup.POST("", roleController.CreateRole)               // 创建角色
		roleGroup.GET("", roleController.GetRoleList)               // 获取角色列表
		roleGroup.GET("/:id", roleController.GetRoleByID)           // 获取角色详情
		roleGroup.PUT("/:id", roleController.UpdateRole)            // 部分更新角色
		roleGroup.PUT("/:id/whole", roleController.UpdateRoleWhole) // 完整更新角色
		roleGroup.DELETE("/:id", roleController.DeleteRole)         // 删除角色
		roleGroup.DELETE("/:id/true", middleware.RequireSuperuser(),
			roleController.DeleteRolePermanently) // 永久删除角色
	}
}

// RegisterRoutes 公共路由注册函数 (保持向后兼容)
func RegisterRoutes(router *gin.RouterGroup) {
	module := &Module{}
	module.registerRoutes(router)
}
